package com.smiletrain.activities;

import java.util.Calendar;

import com.smiletrain.R;
import com.smiletrain.activities.base.AbstractActivity;
import com.smiletrain.base.Paciente;
import com.smiletrain.util.AdminCasos;
import com.smiletrain.util.AdminUsuarios;
import com.smiletrain.util.Constantes;
import com.smiletrain.util.Util;
import com.smiletrain.view.GrupoRadioBoton;
import com.smiletrain.view.ListaSocio;
import com.smiletrain.view.RadioBoton;

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class Form1Activity extends AbstractActivity {
	/**
	 * @see android.app.Activity#onCreate(Bundle)
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.form_1_view);
		super.setFootLayout();
		
		sSocio = (Spinner) findViewById(R.id.sMiembro);
        
//		ArrayAdapter<CharSequence> adSocio = ArrayAdapter.createFromResource(this,
//        		R.array.v00_cbSocios, android.R.layout.simple_spinner_item);
//        
//        adSocio.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		
		String socio = null;
		try {
			socio = AdminUsuarios.instance.getUsuario().getSocio();
		} catch (Exception e) {
			Intent intent = new Intent(Form1Activity.this, Form2Activity.class);
			intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
			startActivity(intent);
			overridePendingTransition(R.anim.in_anim, R.anim.back_anim);
			return;
		}
		
		if(socio != null) socio = socio.replace(" ", "_");
        sSocio.setAdapter(new ListaSocio(socio));

        sHospital = (Spinner) findViewById(R.id.sHospital);
        
        ArrayAdapter<CharSequence> adHospitales = ArrayAdapter.createFromResource(this,
        		AdminUsuarios.instance.getHospitales(), android.R.layout.simple_spinner_item);
        
        adHospitales.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        
        sHospital.setAdapter(adHospitales);
        
        sPais = (Spinner) findViewById(R.id.sPais);
        
		ArrayAdapter<CharSequence> adPais = ArrayAdapter.createFromResource(this,
				R.array.v11_cbPais, android.R.layout.simple_spinner_item);
        
        adPais.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        
        sPais.setAdapter(adPais);
        
        sTipoPeso = (Spinner) findViewById(R.id.sTipoPeso);
        
		ArrayAdapter<CharSequence> adTipoPeso = ArrayAdapter.createFromResource(this,
				R.array.v11_cbTipoPeso, android.R.layout.simple_spinner_item);
        
        adTipoPeso.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        
        sTipoPeso.setAdapter(adTipoPeso);
        
        String tipopesox = caso.getTipopeso();
        for(int i = 0 ; i < sTipoPeso.getCount() ; i++){
        	if(((String) sTipoPeso.getItemAtPosition(i)).equals(tipopesox))
        		sTipoPeso.setSelection(i);
        }
        
        sRaza = (Spinner) findViewById(R.id.sRaza);
        
		ArrayAdapter<CharSequence> adRaza = ArrayAdapter.createFromResource(this,
				R.array.v11_cbRaza, android.R.layout.simple_spinner_item);
        
        adRaza.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        
        sRaza.setAdapter(adRaza);
        
        String razax = caso.getRaza();
        for(int i = 0 ; i < sRaza.getCount() ; i++){
        	if(((String) sRaza.getItemAtPosition(i)).equals(razax))
        		sRaza.setSelection(i);
        }

		firmo.setBotones(
				new RadioBoton(R.id.bSiFirmo,(ImageView) findViewById(R.id.bSiFirmo),true,R.drawable.vista03_radio_sel,R.drawable.vista03_radio),
				new RadioBoton(R.id.bNoFirmo,(ImageView) findViewById(R.id.bNoFirmo),false,R.drawable.vista03_radio_sel,R.drawable.vista03_radio)
				);
		
		ImageView sifirmo = (ImageView) findViewById(R.id.bSiFirmo);
		
		sifirmo.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				firmo.select(R.id.bSiFirmo);
			}
			
		});
		
		ImageView nofirmo = (ImageView) findViewById(R.id.bNoFirmo);
		
		nofirmo.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				firmo.select(R.id.bNoFirmo);
			}
			
		});
		
		Paciente paciente;
		try {
			paciente = AdminCasos.instance.getCasoActual().getPaciente();
		} catch (NullPointerException e) {
			paciente = null;
		}
		
		boolean bgen = true;
		if(paciente != null){
			bgen = paciente.isGenero();
			((TextView) findViewById(R.id.txtNombre)).setText(paciente.getNombres());
			((TextView) findViewById(R.id.txtApellidos)).setText(paciente.getApellidos());
		}
		
		genero.setBotones(
				new RadioBoton(R.id.bHombre,(ImageView) findViewById(R.id.bHombre),bgen,R.drawable.vista03_radio_sel,R.drawable.vista03_radio),
				new RadioBoton(R.id.bMujer,(ImageView) findViewById(R.id.bMujer),!bgen,R.drawable.vista03_radio_sel,R.drawable.vista03_radio)
				);
		
		nacimiento = (EditText) findViewById(R.id.txtNacimiento);
		
		nacimiento.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				showDialog(ID_DIALOGO_NACIMIENTO);
			}
			
		});
		
		Calendar c = Calendar.getInstance();
        nYear = c.get(Calendar.YEAR);
        nMonth = c.get(Calendar.MONTH);
        nDay = c.get(Calendar.DAY_OF_MONTH);
        updateDisplay();
		
		ImageView hombre = (ImageView) findViewById(R.id.bHombre);
		
		hombre.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				genero.select(R.id.bHombre);
			}
			
		});
		
		ImageView mujer = (ImageView) findViewById(R.id.bMujer);
		
		mujer.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				genero.select(R.id.bMujer);
			}
			
		});
		
		ImageView siguiente = (ImageView) findViewById(R.id.bSiguiente);
        
        siguiente.setOnClickListener(new OnClickListener() {
        	
			@Override
			public void onClick(View v) {
				if(validarFormulario() || !Constantes.validar){
					Intent intent = new Intent(Form1Activity.this, Form2Activity.class);
					startActivity(intent);
				}
			}
			
		});
        
        llenarFormulario();
        
	}
	
	@Override
	public void updateCaso() {
		try {
		caso.setSocio(((Spinner) findViewById(R.id.sMiembro)).getSelectedItem().toString().trim());
		caso.setHospital(((Spinner) findViewById(R.id.sHospital)).getSelectedItem().toString().trim());
		caso.setMatricula(((EditText) findViewById(R.id.txtMatricula)).getText().toString().trim());
		caso.setFirmo(firmo.isSelected(R.id.bSiFirmo) ? "Si" : "No");
		caso.setApellidos(((EditText) findViewById(R.id.txtApellidos)).getText().toString().trim());
		caso.setNombre(((EditText) findViewById(R.id.txtNombre)).getText().toString().trim());
		caso.setGenero(genero.isSelected(R.id.bHombre) ? "Hombre" : "Mujer");
		caso.setNacimiento(nacimiento.getText().toString().trim());
		caso.setPeso(((EditText) findViewById(R.id.txtPeso)).getText().toString().trim());
		caso.setRaza(((Spinner) findViewById(R.id.sTipoPeso)).getSelectedItem().toString().trim());
		caso.setRaza(((Spinner) findViewById(R.id.sRaza)).getSelectedItem().toString().trim());
		caso.setCalle(((EditText) findViewById(R.id.txtCalle)).getText().toString().trim());
		caso.setCiudad(((EditText) findViewById(R.id.txtCiudad)).getText().toString().trim());
		caso.setProvincia(((EditText) findViewById(R.id.txtProvincia)).getText().toString().trim());
		caso.setPais(((Spinner) findViewById(R.id.sPais)).getSelectedItem().toString().trim());
		caso.setCp(((EditText) findViewById(R.id.txtCP)).getText().toString().trim());
		caso.setTelefono(((EditText) findViewById(R.id.txtTelefono)).getText().toString().trim());
		caso.setMovil(((EditText) findViewById(R.id.txtMovil)).getText().toString().trim());
		caso.setOtroMovil(((EditText) findViewById(R.id.txtOtroTelefono)).getText().toString().trim());
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	private void llenarFormulario() {
		try {
			
			if(!caso.getHospital().equals("")){
				String hospitalx = caso.getHospital();
		        for(int i = 0 ; i < sHospital.getCount() ; i++){
		        	if(((String) sHospital.getItemAtPosition(i)).equals(hospitalx))
		        		sHospital.setSelection(i);
		        }
			}
	        
			if(!caso.getFirmo().equals("")){
				if(caso.getFirmo().equals("Si"))
					firmo.select(R.id.bSiFirmo);
				else if(caso.getFirmo().equals("No"))
					firmo.select(R.id.bNoFirmo);
			}
	        
			if(!caso.getGenero().equals("")){
				if(caso.getGenero().equals("Hombre"))
					genero.select(R.id.bHombre);
				else if(caso.getGenero().equals("Mujer"))
					genero.select(R.id.bMujer);
			}
			
			if(!caso.getNacimiento().equals(""))
				((EditText) findViewById(R.id.txtNacimiento)).setText(caso.getNacimiento());
			
			if(!caso.getMatricula().equals(""))
				((EditText) findViewById(R.id.txtMatricula)).setText(caso.getMatricula());
			
			if(!caso.getApellidos().equals(""))
				((EditText) findViewById(R.id.txtApellidos)).setText(caso.getApellidos());
			
			if(!caso.getNombre().equals(""))
				((EditText) findViewById(R.id.txtNombre)).setText(caso.getNombre());
			
			if(caso.getPeso() != null && !caso.getPeso().equals(""))
				((EditText) findViewById(R.id.txtPeso)).setText(caso.getPeso());
			
			if(!caso.getCalle().equals(""))
				((EditText) findViewById(R.id.txtCalle)).setText(caso.getCalle());
			
			if(!caso.getCiudad().equals(""))
				((EditText) findViewById(R.id.txtCiudad)).setText(caso.getCiudad());
			
			if(!caso.getProvincia().equals(""))
				((EditText) findViewById(R.id.txtProvincia)).setText(caso.getProvincia());
			
			if(!caso.getCp().equals(""))
				((EditText) findViewById(R.id.txtCP)).setText(caso.getCp());
			
			if(!caso.getTelefono().equals(""))
				((EditText) findViewById(R.id.txtTelefono)).setText(caso.getTelefono());
			
			if(!caso.getMovil().equals(""))
				((EditText) findViewById(R.id.txtMovil)).setText(caso.getMovil());
			
			if(!caso.getOtroMovil().equals(""))
				((EditText) findViewById(R.id.txtOtroTelefono)).setText(caso.getOtroMovil());
			
		} catch(Exception e) {
			e.printStackTrace();
			Toast.makeText(this, "Error: " + e.getMessage(), Toast.LENGTH_LONG).show();
		}
	}

	private boolean validarFormulario() {
		boolean valido = true;
		String msg = null;
		
		String matricula = ((EditText) findViewById(R.id.txtMatricula)).getText().toString().trim();
		if(valido){
			if(matricula.length() == 0) {
				valido = false;
				msg = "Debe ingresar la Matrícula del Paciente";
			} else if(matricula.length() > 200) {
				valido = false;
				msg = "La Matrícula del Paciente es muy largo";
			}
		}
		
		String apellidos = ((EditText) findViewById(R.id.txtApellidos)).getText().toString().trim();
		if(valido){
			if(apellidos.length() == 0) {
				valido = false;
				msg = "Debe ingresar los Apellidos del Paciente";
			} else if(apellidos.length() > 200) {
				valido = false;
				msg = "Los Apellidos del Paciente son muy largos";
			}
		}
		
		String nombre = ((EditText) findViewById(R.id.txtNombre)).getText().toString().trim();
		if(valido){
			if(nombre.length() == 0) {
				valido = false;
				msg = "Debe ingresar el Nombre del Paciente";
			} else if(nombre.length() > 200) {
				valido = false;
				msg = "El Nombre del Paciente es muy largo";
			}
		}
		
		String peso = ((EditText) findViewById(R.id.txtPeso)).getText().toString().trim();
		if(valido){
			if(peso.length() == 0) {
				valido = false;
				msg = "Debe ingresar el Peso del Paciente";
			} else if(peso.length() > 200) {
				valido = false;
				msg = "El Peso del Paciente es muy largo";
			}
		}
		
		String calle = ((EditText) findViewById(R.id.txtCalle)).getText().toString().trim();
		if(valido){
			if(calle.length() == 0) {
				valido = false;
				msg = "Debe ingresar la Calle del Paciente";
			} else if(calle.length() > 200) {
				valido = false;
				msg = "La Calle del Paciente es muy largo";
			}
		}
		
		String ciudad = ((EditText) findViewById(R.id.txtCiudad)).getText().toString().trim();
		if(valido){
			if(ciudad.length() == 0) {
				valido = false;
				msg = "Debe ingresar la Ciudad del Paciente";
			} else if(ciudad.length() > 200) {
				valido = false;
				msg = "La Ciudad del Paciente es muy largo";
			}
		}
		
		String provincia = ((EditText) findViewById(R.id.txtProvincia)).getText().toString().trim();
		if(valido){
			if(provincia.length() == 0) {
				valido = false;
				msg = "Debe ingresar la Provincia del Paciente";
			} else if(provincia.length() > 200) {
				valido = false;
				msg = "La Provincia del Paciente es muy largo";
			}
		}
		
		String cp = ((EditText) findViewById(R.id.txtCP)).getText().toString().trim();
		if(valido){
			if(cp.length() == 0) {
				valido = false;
				msg = "Debe ingresar el C.P. del Paciente";
			} else if(cp.length() > 200) {
				valido = false;
				msg = "El C.P. del Paciente es muy largo";
			}
		}
		
		String telefono = ((EditText) findViewById(R.id.txtTelefono)).getText().toString().trim();
		if(valido){
			if(telefono.length() == 0) {
				valido = false;
				msg = "Debe ingresar el Teléfono del Paciente";
			} else if(telefono.length() > 200) {
				valido = false;
				msg = "El Teléfono del Paciente es muy largo";
			}
		}
		
		String movil = ((EditText) findViewById(R.id.txtMovil)).getText().toString().trim();
		if(valido){
			if(movil.length() == 0) {
				valido = true;
				msg = "Debe ingresar el Movil del Paciente";
			} else if(movil.length() > 200) {
				valido = false;
				msg = "El Movil del Paciente es muy largo";
			}
		}
		
		String otro = ((EditText) findViewById(R.id.txtOtroTelefono)).getText().toString().trim();
		if(valido){
			if(otro.length() == 0) {
				valido = true;
				msg = "Debe ingresar el Otro Teléfono del Paciente";
			} else if(otro.length() > 200) {
				valido = false;
				msg = "El Otro Teléfono del Paciente es muy largo";
			}
		}
		
		String nacfecha = nacimiento.getText().toString().trim();
		if(valido){
			if(nacfecha.length() == 0) {
				valido = false;
				msg = "Debe ingresar la Fecha de Nacimiento del Paciente";
			} else if(nacfecha.length() > 11) {
				valido = false;
				msg = "la Fecha de Nacimiento del Paciente es muy largo";
			}
		}
		
		String socio;
		try{
			socio = ((Spinner) findViewById(R.id.sMiembro)).getSelectedItem().toString().trim();
		}catch(Exception e){
			socio = AdminUsuarios.instance.getUsuario().getSocio();
			if(socio != null) socio = socio.replace(" ", "_");
		}
		
		String hospital;
		try{
			hospital = ((Spinner) findViewById(R.id.sHospital)).getSelectedItem().toString().trim();
		}catch(Exception e){
			hospital = "";
		}
		
		String raza;
		try{
			raza = ((Spinner) findViewById(R.id.sRaza)).getSelectedItem().toString().trim();
		}catch(Exception e){
			raza = "";
		}
		
		String tipopeso;
		try{
			tipopeso = ((Spinner) findViewById(R.id.sTipoPeso)).getSelectedItem().toString().trim();
		}catch(Exception e){
			tipopeso = "";
		}
		
		String pais;
		try{
			pais = ((Spinner) findViewById(R.id.sPais)).getSelectedItem().toString().trim();
		}catch(Exception e){
			pais = "";
		}
		
		if(!valido){
			Toast.makeText(Form1Activity.this, msg, Toast.LENGTH_LONG).show();
		} else {
			caso.setSocio(socio);
			caso.setHospital(hospital);
			caso.setMatricula(matricula);
			caso.setFirmo(firmo.isSelected(R.id.bSiFirmo) ? "Si" : "No");
			caso.setApellidos(apellidos);
			caso.setNombre(peso);
			caso.setGenero(genero.isSelected(R.id.bHombre) ? "Hombre" : "Mujer");
			caso.setNacimiento(nacfecha);
			caso.setPeso(peso);
			caso.setTipopeso(tipopeso);
			caso.setRaza(raza);
			caso.setCalle(calle);
			caso.setCiudad(ciudad);
			caso.setProvincia(provincia);
			caso.setPais(pais);
			caso.setCp(cp);
			caso.setTelefono(telefono);
			caso.setMovil(movil);
			caso.setOtroMovil(otro);
		}
		
		return valido;
	}
	
	@Override
    protected Dialog onCreateDialog(int id) {
		switch (id) {
			case ID_DIALOGO_NACIMIENTO:
				return new DatePickerDialog(this, mDateSetListener,
						nYear, nMonth, nDay);
		}
		return null;
    }
	
	@Override
    protected void onPrepareDialog(int id, Dialog dialog) {
		switch (id) {
			case ID_DIALOGO_NACIMIENTO:
				((DatePickerDialog) dialog).updateDate(nYear, nMonth, nDay);
				break;
		}
    }
	
    private void updateDisplay() {
            nacimiento.setText(
                    new StringBuilder()
                    .append(Util.fillZeros(nDay)).append("/")
                    .append(Util.fillZeros(nMonth + 1)).append("/")
                    .append(nYear));
    }
    
    private DatePickerDialog.OnDateSetListener mDateSetListener =
    		new DatePickerDialog.OnDateSetListener() {
    	
    			@Override
				public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    				nYear = year;
                    nMonth = monthOfYear;
                    nDay = dayOfMonth;
                    updateDisplay();
    			}

    };
	
    private int nYear, nMonth, nDay;
    private EditText nacimiento;
    
	private Spinner sSocio, sHospital, sPais, sRaza, sTipoPeso;
	private GrupoRadioBoton firmo = new GrupoRadioBoton();
	private GrupoRadioBoton genero = new GrupoRadioBoton();

	private static final int ID_DIALOGO_NACIMIENTO = 1;
	
}

